package cn.itcast.nems.order.dto.message;

import cn.itcast.nems.order.dto.StudentRecordFundFlowDTO;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 订单支付投递消息实体
 * 字段包含: 主租户ID、子租户ID、业务线ID、客户ID、订单ID、订单编号、订单业务编号、
 *      订单应付金额、已支付总额、订单支付流水号（e2_order_payment_flow.no）、本次支付金额、本次支付时间、
 *      支付方式编码、支付方式名称、支付渠道编码、支付渠道名称、是否全部支付
 * </p>
 *
 * @author zhouwei
 * @since 2023/10/26 3:46 PM
 **/
@Data
@NoArgsConstructor
public class OrderPaidMessageDTO implements Serializable {
    /**
     * 业务线ID
     */
    private Integer businessLineId;
    /**
     * 客户ID
     */
    private String customerId ;
    /**
     * 订单ID
     */
    private String orderId ;

    /**
     * 订单行ID LIST
     */
    private List<String> orderLineIds ;
    /**
     * 订单编号
     */
    private String orderNo ;
    /**
     * 业务订单编号，需要接入方传递。要求主租户内唯一。
     */
    private String bizOrderNo;
    /**
     * 主订单应付金额=订单原金额-优惠总额。单位：分。
     */
    private Integer orderAmountDue;

    /**
     * 主订单已支付金额。单位：分。注：每次支付累计，退费不减！
     */
    private Integer orderPaidAmount;

    /**
     * 流水号  e2_order_payment_flow.no
     */
    private String flowNo;
    /**
     * 本次发生金额：支付为正，退费为负。单位：分
     */
    private Integer flowAmount;
    /**
     * 支付流水业务发生时间：根据凭单的不同，分别记录在线支付时间、离线支付时间、退费时间。
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime bizDate;
    /**
     * 支付方式编号：在线支付填写支付平台对应支付方式编号，离线支付填写离线支付对应凭单上的支付方式编号，退费则填写退费方式编号
     */
    private String paymentMethodCode;
    /**
     * 支付方式名称：在线支付填写支付平台对应支付方式名称，离线支付填写离线支付对应凭单上的支付方式名称，退费则填写退费方式名称
     */
    private String paymentMethodName;

    /**
     * 支付渠道帐号编号：同一个支付方式可能会对应多个支付渠道。比如支付宝、微信可能会有多个渠道账号，银行也会有多个帐号。此处保存比支付方式更细粒度的具体帐号。
     */
    private String paymentAccountCode;

    /**
     * 支付渠道帐号名称
     */
    private String paymentAccountName;
    /**
     * 是否全部支付
     */
    private Boolean paidFlag ;
    /**
     * 主租户ID
     */
    private Integer tenantId;

    /**
     * 子租户ID
     */
    private Integer subtenantId;

    /**
     * NEW("新报名"), RENEWAL("升级"), TRANSFER("转班"), REPETITION("重读/留级") ;
     */
    private String source ;

    /**
     * 凭单类型 在线支付:ONLINE_PAY、线下支付:OFFLINE_PAY、退款:REFUND_PAY
     */
    private String journalType ;

    private StudentRecordFundFlowDTO studentRecordFundFlowDTO;

    /**
     * 手续费：amount*charge_rata/100。单位：分。注：目前只有支付会存在费用。
     */
    private Integer charge;

    /**
     * 手续费费率。和渠道方确定。
     */
    private BigDecimal chargeRate;
    /**
     * 备注
     */
    private String remark;

    /**
     * 创建者email
     */
    private String operatorEmail;
}
